La mise en cache
================

La mise en cache est un moyen bon marché et efficace d'améliorer les performances d'une application
Web. En stockant les données relativement statiques dans un cache et en les récupérant à la demande à partir de ce même cache, nous économisons le temps nécessaire pour générer ces données.

Utiliser un cache dans Yii consiste principalement à configurer et accéder à un composant d'application cache. La configuration de l'application suivante spécifie un composant de cache qui utilise memcache avec deux serveurs de cache:

~~~
[php]
array(
	......
	'components'=>array(
		......
		'cache'=>array(
			'class'=>'system.caching.CMemCache',
			'servers'=>array(
				array('host'=>'serveur1', 'port'=>11211, 'weight'=>60),
				array('host'=>'serveur2', 'port'=>11211, 'weight'=>40),
			),
		),
	),
);
~~~

Lorsque l'application est en cours d'exécution, le composant de cache peut être consulté via
`Yii::app()->cache`.

Yii fournit différents composants de cache qui peuvent stocker des données mises en cache dans différents médias. Par exemple, le composant [CMemCache] encapsule l'extension PHP memcache et utilise la mémoire comme support de mémoire cache, le composant [CApcCache] encapsule l'extension PHP APC et le composant [CDbCache] stocke les données à mettre en cache dans une base de données. Ce qui suit est un résumé des éléments de cache disponibles :

   - [CMemCache]: utilise [l'extention PHP memcache] (http://www.php.net/manual/en/book.memcache.php).

   - [CApcCache]: utilise [l'extension PHP APC] (http://www.php.net/manual/en/book.apc.php).

   - [CXCache]: utilise [l'extension PHP XCache](http://xcache.lighttpd.net/).

   - [CEAcceleratorCache]: utilise [l'extension PHP EAccelerator] (http://eaccelerator.net/).

- [CRedisCache]: utilise [redis](http://redis.io/) valeur-clé de stockage comme support sous-jacent de mise en cache.
   - [CDbCache]: utilise une table en base de données pour stocker les données mises en cache.
Par défaut, une base de données SQLite3 va être créée et utilisée dans le répertoire d'exécution.
Vous pouvez spécifier explicitement une base de données à utiliser en utilisant la 
propriété [connectionID|CDbCache::connectionID].

   - [CZendDataCache]: utilise [le cache de données Zend](http://files.zend.com/help/Zend-Server-Community-Edition/data_cache_component.htm)
   comme support sous-jacent de mise en cache.

- [CWinCache]: utilise l'extension [WinCache pour PHP](http://iis.net/downloads/microsoft/wincache-extension)
   ([voir aussi](http://php.net/manual/en/book.wincache.php)).

   - [CFileCache]: utilise des fichiers pour stocker des données en mémoire cache.
Ceci est particulièrement adapté pour mettre en cache de gros morceau de données (telles que des pages).

   - [CDummyCache]: est un cache factice qui ne fait pas la mise en cache du tout. Le but de ce composant est de simplifier le code qui a besoin de vérifier la disponibilité de cache.
Par exemple, au cours du développement ou si le serveur ne prend pas en charge la mémoire cache, nous pouvons utiliser ce composant cache. Quand un support de mémoire cache est disponible, on peut alors utiliser le composant de cache correspondant. Dans les deux cas, le code utilisé pour tenter de récupérer des données en cache est exactement le même
`Yii::app()->cache->get($key)` sans avoir à se soucier de ce que `Yii::app()->cache` est peut-être `null`.

> Astuce: Parce que tous ces composants cache étendent la même classe de base [CCache], on peut passer d'un type de cache à un autre sans avoir à  modifier le code qui utilise le cache.

La mise en cache peut être utilisée à différents niveaux. Au niveau le plus bas, nous utilisons le cache pour stocker une seule données, comme une variable, et nous appelons cela *la mise en cache des données*. Au niveau suivant, on stocke dans la mémoire cache un fragment de page qui est généré par une partie d'un script de vue. Et au plus haut niveau, nous enregistrons une page entière dans le cache pour la resservir telle quelle de la mémoire cache en fonction des besoins.

Dans les prochains paragraphes, nous élaborons comment utiliser le cache à ces niveaux.

> Remarque: Par définition, un cache est un support de stockage volatile. Il ne garantit pas l'existence d'une donnée mise en cache même si elle n'expire pas.
Par conséquent, ne pas utiliser le cache comme un moyen de stockage persistant.
(Par exemple: ne pas utiliser le cache pour stocker les données de session).

<div class="revision">$Id$</div>
